package com.wangshouyu.mp.base.request;

/**
 * @author 王守钰
 * @date 2020年12月04日 19:30
 * @description 微信公众号请求客户端
 */
public interface MpClient {

    /**
     * 请求
     * @param request 微信公众号请求
     * @return 微信公众号响应结果
     */
    MpResponse request(MpRequest request);

    /**
     * 请求
     * @param request 请求
     * @param clz 响应对象
     * @param <T>
     * @return 响应对象
     */
    <T> T request(MpRequest request, Class<T> clz);

    /**
     * 请求
     * @param method
     * @param url
     * @return 包装数据
     */
    default MpResponse request(HttpMethod method, String url){
        MpRequest request = new MpRequest();
        request.setUrl(url);
        request.setMethod(method);
        return request(request);
    }

    /**
     * 请求
     * @param method 方法
     * @param url 请求地址
     * @param body 请求body
     * @return 响应
     */
    default MpResponse request(HttpMethod method, String url, RequestBody body){
        MpRequest request = new MpRequest();
        request.setUrl(url);
        request.setMethod(method);
        request.setBody(body);
        return request(request);
    }

    /**
     * 请求
     * @param method 请求方法
     * @param url 请求地址
     * @param clz 响应类型
     * @param <T> 类型
     * @return 响应数据
     */
    default <T> T request(HttpMethod method, String url, Class<T> clz){
        MpRequest request = new MpRequest();
        request.setUrl(url);
        request.setMethod(method);
        return request(request, clz);
    }

    /**
     * 请求
     * @param method 请求方法
     * @param url 请求地址
     * @param body 请求体
     * @param clz 响应类型
     * @param <T> 类型
     * @return 响应数据
     */
    default <T> T request(HttpMethod method, String url, RequestBody body, Class<T> clz){
        MpRequest request = new MpRequest();
        request.setUrl(url);
        request.setMethod(method);
        request.setBody(body);
        return request(request, clz);
    }

}
